// store/pages/index/search.js
const GoodsService = require('../../../services/goods');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    keyword: '', // 搜索关键词
    goodsList: [], // 商品列表
    loading: false, // 加载状态
    hasMore: true, // 是否有更多数据
    page: 1, // 当前页码
    limit: 10, // 每页数量
    total: 0, // 总数
    searchHistory: [], // 搜索历史
    showHistory: false, // 是否显示搜索历史
    inputValue: '' // 输入框的值
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 从缓存获取搜索历史
    this.loadSearchHistory();
    
    // 如果有传入关键词，直接搜索
    if (options.keyword) {
      this.setData({
        keyword: options.keyword,
        inputValue: options.keyword
      });
      this.searchGoods();
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    // 聚焦搜索输入框
    this.focusSearchInput();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时聚焦搜索框
    this.focusSearchInput();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    // 页面隐藏时保存搜索历史
    this.saveSearchHistory();
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 页面卸载时保存搜索历史
    this.saveSearchHistory();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 下拉刷新
    this.refreshSearch();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 上拉加载更多
    this.loadMore();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '搜索商品',
      path: '/store/pages/index/search'
    };
  },

  /**
   * 聚焦搜索输入框
   */
  focusSearchInput() {
    // 延迟聚焦，确保页面渲染完成
    setTimeout(() => {
      const query = wx.createSelectorQuery();
      query.select('#searchInput').fields({
        properties: ['focus']
      }, (res) => {
        if (res) {
          wx.createSelectorQuery().select('#searchInput').node().exec((res) => {
            if (res[0] && res[0].node) {
              res[0].node.focus();
            }
          });
        }
      }).exec();
    }, 300);
  },

  /**
   * 输入框输入事件
   */
  onInput(e) {
    const value = e.detail.value;
    this.setData({
      inputValue: value
    });
  },

  /**
   * 输入框确认事件
   */
  onConfirm(e) {
    const keyword = e.detail.value.trim();
    if (keyword) {
      this.setData({
        keyword: keyword,
        showHistory: false
      });
      this.searchGoods();
    }
  },

  /**
   * 搜索按钮点击事件
   */
  onSearch() {
    const keyword = this.data.inputValue.trim();
    if (keyword) {
      this.setData({
        keyword: keyword,
        showHistory: false
      });
      this.searchGoods();
    } else {
      wx.showToast({
        title: '请输入搜索关键词',
        icon: 'none'
      });
    }
  },

  /**
   * 清空输入框
   */
  onClear() {
    this.setData({
      inputValue: '',
      keyword: '',
      goodsList: [],
      hasMore: true,
      page: 1,
      total: 0
    });
    this.showSearchHistory();
  },

  /**
   * 显示搜索历史
   */
  showSearchHistory() {
    this.setData({
      showHistory: true
    });
  },

  /**
   * 隐藏搜索历史
   */
  hideSearchHistory() {
    this.setData({
      showHistory: false
    });
  },

  /**
   * 点击搜索历史项
   */
  onHistoryItemTap(e) {
    const keyword = e.currentTarget.dataset.keyword;
    this.setData({
      keyword: keyword,
      inputValue: keyword,
      showHistory: false
    });
    this.searchGoods();
  },

  /**
   * 清空搜索历史
   */
  clearSearchHistory() {
    wx.showModal({
      title: '提示',
      content: '确定要清空搜索历史吗？',
      success: (res) => {
        if (res.confirm) {
          this.setData({
            searchHistory: []
          });
          wx.removeStorageSync('searchHistory');
          wx.showToast({
            title: '已清空搜索历史',
            icon: 'success'
          });
        }
      }
    });
  },

  /**
   * 搜索商品
   */
  async searchGoods() {
    if (!this.data.keyword) {
      return;
    }

    this.setData({
      loading: true,
      page: 1,
      hasMore: true
    });

    try {
      const result = await GoodsService.searchGoods({
        keyword: this.data.keyword,
        page: 1,
        limit: this.data.limit
      });

      if (result.success) {
        this.setData({
          goodsList: result.data.list || [],
          total: result.data.total || 0,
          hasMore: (result.data.list || []).length >= this.data.limit
        });

        // 添加到搜索历史
        this.addToSearchHistory(this.data.keyword);

        if (result.data.total === 0) {
          wx.showToast({
            title: '未找到相关商品',
            icon: 'none'
          });
        }
      } else {
        wx.showToast({
          title: result.message || '搜索失败',
          icon: 'none'
        });
      }
    } catch (error) {
      wx.showToast({
        title: '搜索失败，请重试',
        icon: 'none'
      });
    } finally {
      this.setData({
        loading: false
      });
      wx.stopPullDownRefresh();
    }
  },

  /**
   * 刷新搜索
   */
  refreshSearch() {
    this.searchGoods();
  },

  /**
   * 加载更多
   */
  async loadMore() {
    if (this.data.loading || !this.data.hasMore) {
      return;
    }

    this.setData({
      loading: true
    });

    try {
      const nextPage = this.data.page + 1;
      const result = await GoodsService.searchGoods({
        keyword: this.data.keyword,
        page: nextPage,
        limit: this.data.limit
      });

      if (result.success) {
        const newList = result.data.list || [];
        this.setData({
          goodsList: [...this.data.goodsList, ...newList],
          page: nextPage,
          hasMore: newList.length >= this.data.limit
        });
      } else {
        wx.showToast({
          title: result.message || '加载失败',
          icon: 'none'
        });
      }
    } catch (error) {
      wx.showToast({
        title: '加载失败，请重试',
        icon: 'none'
      });
    } finally {
      this.setData({
        loading: false
      });
    }
  },

  /**
   * 添加到搜索历史
   */
  addToSearchHistory(keyword) {
    let history = this.data.searchHistory;
    
    // 移除已存在的相同关键词
    history = history.filter(item => item !== keyword);
    
    // 添加到开头
    history.unshift(keyword);
    
    // 限制历史记录数量
    if (history.length > 10) {
      history = history.slice(0, 10);
    }
    
    this.setData({
      searchHistory: history
    });
  },

  /**
   * 加载搜索历史
   */
  loadSearchHistory() {
    try {
      const history = wx.getStorageSync('searchHistory') || [];
      this.setData({
        searchHistory: history
      });
    } catch (error) {
      console.error('加载搜索历史失败:', error);
    }
  },

  /**
   * 保存搜索历史
   */
  saveSearchHistory() {
    try {
      wx.setStorageSync('searchHistory', this.data.searchHistory);
    } catch (error) {
      console.error('保存搜索历史失败:', error);
    }
  },

  /**
   * 跳转到商品详情
   */
  onGoodsItemTap(e) {
    const goodsId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/store/pages/goods/detail?id=${goodsId}`
    });
  }
});